import axios from 'axios';
import store from '@/store'
import { ElMessage } from 'element-plus'
import { isCheckTimeout } from '@/utils/auth'
import utils from '@/utils/utils'
const service = axios.create({
  baseURL: import.meta.env.VITE_API_URL,
  // withCredentials: true,
  timeout: 5000
})

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    config.headers.icode = 'input icode'
    // 在这个位置需要统一的去注入token
    if (store.getters.token) {
      if (isCheckTimeout()) {
        // 登出操作
        store.dispatch('user/logout')
        utils.hideLoadding()
        return Promise.reject(new Error('token 失效'))
      }
      config.headers['X-Token'] = store.getters.token
    }
    // // 配置接口国际化
    // config.headers['Accept-Language'] = store.getters.language
    return config // 必须返回配置
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const { success, message, content, code } = response.data
    //   要根据success的成功与否决定下面的操作
    // console.log('content : ' + JSON.stringify(content))
    if (success) {
      if (code === 11) {
        return response.data
      }
      if (code === 1000) {
        return {
          msg: message,
          flag: true
        }
      }
      if (code === -1000) {
        return {
          msg: message,
          flag: false
        }
      }
      if (content == null) {
        return success
      }
      return content
    } else {
      if (code === -99) {
        store.dispatch('user/resetToken').then(() => {
          location.reload() // 为了重新实例化vue-router对象 避免bug
        })
        // })
      } else {
        utils.hideLoadding()
        // 业务错误
        // ElMessage.error(message) // 提示错误消息
        return Promise.reject(new Error(message))
      }

    }
  },
  error => {
    // 处理 token 超时问题
    if (
      error.response &&
      error.response.data &&
      error.response.data.code === 401
    ) {
      // token超时
      store.dispatch('user/logout')
    }
    // ElMessage.error(error.message) // 提示错误信息
    return Promise.reject(error)
  }
)

export default service
